﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Gruppe1OOPEksamen {

    public abstract class Tørretumbler : Vare, IEnergi {
        private double _energiFobrug;
        private double _højde;
        private double _bredde;
        private double _længde;

        public double Energiforbrug {
            get { 
                return _energiFobrug; 
            }
            set {
                _energiFobrug = value;

                //Efter Energiforbrug er sat køre tjekket på hvilket Energimærke den skal have
                EnergiKontrol();
            }
        }
        public char EnergiMærke { get; set; }
        public int Kapacitet { get; set; }
        public double Længde {
            get {
                return _længde;
            }
            set {
                //Hvis der bliver tildelt en negativ værdi, bliver der smidt en exception
                if (value < 0)
                    throw new ArgumentOutOfRangeException("Du kan ikke tildele en negativ værdi her");
                else
                    _længde = value;
            }
        }
        public double Bredde {
            get {
                return _bredde;
            }
            set {
                if (value < 0)
                    throw new ArgumentOutOfRangeException("Du kan ikke tildele en negativ værdi her");
                else
                    _bredde = value;
            }
        }
        public double Højde {
            get {
                return _højde;
            }
            set {
                if (value < 0)
                    throw new ArgumentOutOfRangeException("Du kan ikke tildele en negativ værdi her");
                else
                    _højde = value;
            }
        }
        public double Støjniveau { get; set; }
        public int Tørretid { get; set; }

        #region constructors
        public Tørretumbler(double højdeind, double længdeInd, double breddeInd, int kapacitetInd, double energiForbrugInd, string navnInd, double prisInd, double støjniveauInd, int tørretidInd) 
               : base(navnInd, prisInd){
            Højde = højdeind;
            Længde = længdeInd;
            Bredde = breddeInd;
            Kapacitet = kapacitetInd;
            Energiforbrug = energiForbrugInd;
            Støjniveau = støjniveauInd;
            Tørretid = tørretidInd;
        }
        #endregion

        //En virtual metode som skal overrides i en af sub-klasserne til Tørretumbler
        public virtual void EnergiKontrol() { }

        public override string ToString() {
            string toReturn = "";

            toReturn += base.ToString();
            //tilføj Energiforbrug
            toReturn += "\nEnergiforbrug: " + Energiforbrug + " kWh.";
            //tilføj Energimærke
            toReturn += "\nEnergimærke: " + EnergiMærke;
            //tilføj Kapacitet
            toReturn += "\nKapacitet: " + Kapacitet + " kg.";
            //tilføj Længde
            toReturn += "\nLængde: " + Længde + " cm.";
            //tilføj Bredde
            toReturn += "\nBredde: " + Bredde + " cm.";
            //tilføj Højde
            toReturn += "\nHøjde: " + Højde + " cm.";
            //tilføj Støjniveau
            toReturn += "\nStøjniveau: " + Støjniveau + " dB.";
            //tilføj Tørretid
            toReturn += "\nTørretid: " + Tørretid + "Minutter";

            return toReturn;
        }
    }
}
